#pragma once
#include "PlayerColor.h"
#include "BoardItem.h"
#include "Handle.h"

namespace catan
{
	template<class Type>
	class Handle ;
	class Field;
	typedef std::vector<Handle<Field>> Fields;

	class BuildPoint;
	typedef std::vector<Handle<BuildPoint>> BuildPoints;

	class Port;
	typedef std::vector<Handle<Port>> Ports;

	class FieldResource;
	typedef std::vector<Handle<FieldResource>> FieldResources;

	class Edge;

	typedef std::vector<Handle<Edge>> Edges;

	template <class _Ty>
	struct Buildings;

	class Road;
	typedef Buildings<Road> Roads;

	class Player;
	typedef std::vector<Handle<Player>> Players;

	class DevelopmentCard;
	typedef std::vector<Handle<DevelopmentCard>> DevelopmentCards;

	class Board;

	class FieldDieNum;
	typedef std::vector<Handle<FieldDieNum>> FieldDieNums;

	class ResourceCard;
	typedef std::list<Handle<ResourceCard>> ResourceCards;

	typedef std::map<PlayerColor::Enum, ResourceCards> PlayersHarvestResourceCards;

	class Robber;

	class Building;
	//typedef std::vector<Building*> Buildings;
	
	class House;
	typedef Buildings<House> Houses;
	
	class Settlement;
	typedef Buildings<Settlement> Settlements;

	class PlayerItem;

	class PlayerPack;

	class DieNumber;
	typedef std::vector<DieNumber> DieNumbers;
}
